import Vue from 'vue'
import App from '@/App'
import router from '@/router'                 // api: https://github.com/vuejs/vue-router
import store from '@/store'                   // api: https://github.com/vuejs/vuex
import VueCookie from 'vue-cookie'            // api: https://github.com/alfhen/vue-cookie
import '@/element-ui'                         // api: https://github.com/ElemeFE/element
import '@/icons'                              // api: http://www.iconfont.cn/
import '@/element-ui-theme'
import '@/assets/scss/index.scss'
import 'element-ui/lib/theme-chalk/index.css'
import httpRequest from '@/utils/httpRequest' // api: https://github.com/axios/axios
import { isAuth } from '@/utils'
import cloneDeep from 'lodash/cloneDeep'

import VueSocketIO from 'vue-socket.io'
import socketio from 'socket.io-client'
import enums from '@/utils/enums'
// socket io
// socket 连接参数
const socketOptions = {
  autoConnect: false,
  path: '',
  withCredentials: false
  // 自动连接     这里为我项目需求  需要在指定情况下才连接socket
}
console.log('socketIO地址', window.SITE_CONFIG['socketIoDomain'])
let socketIOInstance = new VueSocketIO({
  debug: true,
  connection: socketio(window.SITE_CONFIG['socketIoDomain'], socketOptions) // options object is Optional
})

Vue.use(socketIOInstance)

Vue.use(VueCookie)
Vue.config.productionTip = false

// 非生产环境, 适配mockjs模拟数据                 // api: https://github.com/nuysoft/Mock
if (process.env.NODE_ENV !== 'production') {
  require('@/mock')
}

// 挂载全局
Vue.prototype.$http = httpRequest // ajax请求方法
Vue.prototype.isAuth = isAuth     // 权限方法
Vue.prototype.$enums = enums // 枚举
// 保存整站vuex本地储存初始状态
window.SITE_CONFIG['storeState'] = cloneDeep(store.state)

/**
 * 表格-时间格式化
 */
Vue.prototype.tableTimeFormatter = function (row, column, cellValue, index) {
  return getTimeShow(row[column.property])
}
/**
 * 时间显示 信息
 * @param {时间}} timeStr
 */
function getTimeShow (timeStr) {
  if (!timeStr) { return timeStr }
  // debugger;

  var now = new Date()

  var date = new Date(timeStr)

  // 计算时间间隔，单位为分钟

  var inter = parseInt((now.getTime() - date.getTime()) / 1000 / 60)

  if (inter == 0) {
    return '刚刚'
  }

  // 多少分钟前
  else if (inter < 60) {
    return inter.toString() + '分钟前'
  }

  // 多少小时前
  else if (inter < 60 * 24) {
    return parseInt(inter / 60).toString() + '小时前'
  }

  // 本年度内，日期不同，取日期+时间  格式如  06-13 22:11
  else if (now.getFullYear() == date.getFullYear()) {
    return (
      (date.getMonth() + 1).toString() +
      '-' +
      date.getDate().toString() +
      ' ' +
      date.getHours() +
      ':' +
      date.getMinutes()
    )
  } else {
    return (
      date
        .getFullYear()
        .toString()
        .substring(2, 3) +
      '-' +
      (date.getMonth() + 1).toString() +
      '-' +
      date.getDate().toString() +
      ' ' +
      date.getHours() +
      ':' +
      date.getMinutes()
    )
  }
}

Date.prototype.format = function (fmt) {
  var o = {
    'M+': this.getMonth() + 1, // 月份
    'd+': this.getDate(), // 日
    'H+': this.getHours(), // 小时
    'm+': this.getMinutes(), // 分
    's+': this.getSeconds(), // 秒
    'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
    'S': this.getMilliseconds() // 毫秒
  }
  if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length))
  for (var k in o) { if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length))) }
  return fmt
}

Vue.prototype.getTimeShow = getTimeShow
// 跳转页面
Vue.prototype.goRoute = function (href) {
  window.location.href = href
}

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store,
  template: '<App/>',
  components: { App }
})
